/*
    Asignatura: Procesadores de lenguajes.
    Practica de labotario numero 10.
    Autores:
                Guillermo Garcia Juanes (Alu3889)
                Jose Antonio Hernandez Gonzalez (Alu3809)

    Fichero: AnalexC.g
    Contenido: Analizador Lexico definido en la practica 10 para el lenguaje C.
*/
lexer grammar AnalexC;

@header{ package pl.equipo13.p10; }

/*----------------------------------------------------LEXICO----------------------------------------------------*/

/* Tokens */
INT: 'int';
VOID: 'void';
CHAR: 'char';
FLOAT: 'float';
WHILE: 'while';
IF: 'if';
ELSE: 'else';
BREAK: 'break';

/* Reglas */
fragment NUEVA_LINEA: ('\n' | '\r\n');
fragment DIGITO: '0'..'9';
fragment LETRA: ('A'..'Z') | ('a'..'z') | '.';
fragment GUIONBAJO: '_';
fragment GUION: '-';
fragment MAS: '+';
fragment ASTERISCO: '*';
fragment SLASH: '/';
fragment MAYOR: '>';
fragment MENOR: '<';
ASIGNACION: '=';

BLANCO: (' '|'\t'|NUEVA_LINEA) {$channel=HIDDEN;};

SEPARADOR: ';';
COMA: ',';
APARENTESIS: '(';
CPARENTESIS: ')';
ALLAVE: '{';
CLLAVE: '}';

INTERR: '?';
DOSPUNTOS: ':';

/* Operadores */
SUMRES: MAS |GUION;
MULDIV: ASTERISCO | SLASH;

/* Comparadores */
fragment CIGUAL: '==';
fragment CMAYOR: MAYOR;
fragment CMENOR: MENOR;
fragment CMAYORI: '>=';
fragment CMENORI: '<=';
fragment CDISTINT: '!=';

OPCOMP: CIGUAL |CMAYOR |CMENOR | CMAYORI | CMENORI | CDISTINT;

NUMERO : ((DIGITO)+ '.') => (DIGITO)+ '.' (DIGITO)* | (DIGITO)+;
IDENT: (LETRA | GUIONBAJO) (LETRA | GUIONBAJO | DIGITO)*;
CARACTER: '\'' LETRA '\'';